package com.A2yeild方法与join方法的区别;

/**
 * @Auther: SJZ    2907374717@qq.com
 * @Date: 2019/3/11 22:33
 * @Description:
 * yield()方法
 * yield:屈服，投降
 * priority:优先级
 * 理论上，yeild意味着放手，投降，一个调用yeild()方法的线程告诉虚拟机
 * 它乐意让其他线程占用自己的位置，这表明该线程没有做一些紧急的事情。注意
 * 这仅是一个暗示，并不能保证不会产生任何影响。
 * yeild是一个静态的原生（native）方法
 * yeild告诉当前正在执行的线程把运行机会交给线程池中拥有相同优先级的线程。
 * Yeild不能保证使得当前正在运行的线程迅速转换到“可运行的状态”。
 * 它仅能使一个线程从运行状态转到“可运行状态”，而不是等待或者阻塞状态。
 *
 *
 * Join 方法
 * 线程实例的方法join()方法可以使得一个线程在另一个线程结束后再执行。
 * 如果join()方法在一个线程实例上使用，当前的运行线程经阻塞直到这个线程实例
 * 完成了执行。
 * 在join()方法类设定超时，使得join()方法的影响在特定超时后五香。无超时时
 * 主方法和任务线程申请运行的时候是平等的，然而，当涉及sleep是，join()依靠操作
 * 系统计时，所以你不确定假定join（）方法将会等待你指定的时间。
 */
public class YeildAndJoin {

    public static  void main(String [] args){
        Thread producer = new Producer();
        Thread consumer = new Consumer();
        producer.setPriority(Thread.MIN_PRIORITY);
        consumer.setPriority(Thread.MAX_PRIORITY);
        producer.start();
        consumer.start();
    }
}
class Producer extends Thread{
    public void run(){
        for(int i=0;i<5;i++){
            System.out.println("I am producer ：produced Item"+i);
            Thread.yield();
        }
    }
}

class Consumer extends  Thread{
    public  void run(){
        for(int i=0;i<5;i++){
            System.out.println("I an Consumer: Consumed Item"+i);
            Thread.yield();
        }
    }
}
